package busterminal.persistence;

import busterminal.entity.ScheduledItem;
import busterminal.entity.service.DaysOfWeek;
import busterminal.entity.service.Time;
import java.util.List;

/**
 * Интерфейс Data Access Object для пункта расписания
 */
public interface ScheduledItemDAO extends AbstractDAO<ScheduledItem> {

    /**
     * Найти пункты расписания по дням недели осуществления маршрутов
     * @param routingDays дни недели осуществления маршрутов
     * @return список найденных пунктов расписания
     */
    List<ScheduledItem> findByRoutingDays(List<DaysOfWeek> routingDays);

    /**
     * Найти пункты расписания в указанном диапазоне времени
     * @param now текущее время
     * @param day текущий день недели
     * @param amountBefore интервал "до"
     * @param amountAfter интервал "после"
     * @return список найденных пунктов расписания
     */
    List<ScheduledItem> findByTime(Time now, DaysOfWeek day, Time amountBefore, Time amountAfter);

    /**
     * Найти пункты расписания в указанном диапазоне времени (используется текущее время и день недели)
     * @param amountBefore интервал "до"
     * @param amountAfter интервал "после"
     * @return список найденных пунктов расписания
     */
    List<ScheduledItem> findByTime(Time amountBefore, Time amountAfter);

    /**
     * Найти пункты расписания по названию маршрута
     * @param routeName название маршрута
     * @return список пунктов расписания
     */
    List<ScheduledItem> findByRouteName(String routeName);
}
